home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 34.zip
/
BS1 part 34
/
GFA basic training.adf
/
Grafik
/
3.2.LST
< prev
next >
Wrap
File List
|
1989-06-01
|
13KB
|
526 lines
@main
'
> PROCEDURE main
OPENS 1,0,0,640,256,4,32768
OPENW #1,0,0,640,256,&H8,&H1000,1
ze&=5
sp&=5
DIM daten(ze&,sp&),darstellung$(6)
FOR i|=0 TO ze&
FOR j|=0 TO sp&
daten(i|,j|)=RAND(50)-RAND(50)
NEXT j|
NEXT i|
'
RESTORE art
FOR i|=1 TO 6
READ darstellung$(i|)
NEXT i|
'
REPEAT
@auswahl_box(1,6,darstellung$(),art!())
i|=1
WHILE art!(i|) AND i|<6
INC i|
WEND
ERASE art!()
@daten(i|)
UNTIL i|=6
CLOSEW #1
CLOSES 1
'
art:
DATA 3D-Histogramm,Fläche,Schichtogramm,Kurven,Histogramm,Ende
RETURN
> PROCEDURE daten(art|)
SELECT art|
CASE 1 ! 3D-Histogramm
'
@drei_dee_histo(daten())
'
CASE 2 ! Fläche
@flÄche(daten())
'
CASE 3 ! Schichtogramm
'
@schichto(daten())
'
CASE 4 ! Kurven
'
@kurven(daten())
'
CASE 5 ! Histogramm
'
@histo(daten())
'
ENDSELECT
REPEAT
UNTIL MOUSEK OR INKEY$<>""
CLS
RETURN
'
> PROCEDURE drei_dee_histo(VAR array())
DIM f_x%(5),f_y%(5)
d_x&=80
d_y&=220
winkel|=80
knick|=20
p|=0
@min_max(0,array())
@rahmen1(min,max)
scale=10/((max-min)/10)
'
FOR z&=0 TO zeilen&
@farbe(z&+2)
DRAW "sy0"
DRAW "pu ma",d_x&,d_y&,"tt",winkel|,"fd 250 bk",SUCC(z&)*(250/SUCC(zeilen&))
IF min<0
DRAW "sy",scale
DRAW "tt 0 fd",ABS(min)
ENDIF
FOR s&=0 TO spalten&
'
DEFFILL z&+2,1
@balken(scale,220/SUCC(spalten&),array(z&,s&),220/SUCC(zeilen&))
DRAW "sy0 pu tt",winkel|+knick|,"fd",250/SUCC(spalten&)
'
NEXT s&
NEXT z&
ERASE f_x%(),f_y%()
RETURN
> PROCEDURE histo(VAR array())
'
@min_max(0,array())
@rahmen2("Histogramm",min,max)
DEFFN h_y(wert)=null&-(wert/(max-min))*160
'
FOR z&=0 TO zeilen&
'
p|=0
b_b&=abs_abs&/(spalten&+2)
hx_ko&=a_null&+z&*abs_abs&+b_b&/2
FOR s&=0 TO spalten&
'
@farbe(SUCC(s&))
COLOR SUCC(s&)
PBOX hx_ko&,null&,hx_ko&+b_b&,FN h_y(array(z&,s&))
ADD hx_ko&,b_b&
'
NEXT s&
'
NEXT z&
RETURN
> PROCEDURE kurven(VAR array())
'
@min_max(0,array())
@rahmen2("Kurven-Diagramm",min,max)
DEFFN k_y(wert)=null&-(wert/(max-min))*160
p|=0
FOR z&=0 TO zeilen&
'
COLOR SUCC(z&)
@farbe(SUCC(z&))
PLOT a_null&+abs_abs&/2,FN k_y(array(z&,0))
FOR s&=1 TO spalten&
DRAW TO a_null&+abs_abs&/2+s&*abs_abs&,FN k_y(array(z&,s&))
NEXT s&
'
NEXT z&
'
RETURN
> PROCEDURE flÄche(VAR array())
spalten&=PRED(LPEEK(LPEEK(ARRPTR(daten()))))
zeilen&=PRED(LPEEK(LPEEK(ARRPTR(daten()))+4))
DIM flÄche(SUCC(spalten&))
FOR z&=0 TO zeilen&
FOR s&=0 TO spalten&
ADD flÄche(s&),array(z&,s&)
min=MIN(min,flÄche(s&))
max=MAX(max,flÄche(s&))
NEXT s&
NEXT z&
DEC spalten&
@rahmen2("Flächen-Diagramm",min,max)
INC spalten&
DEFFN y_koord(wert)=o_null&-((wert-min)/(max-min))*160
DIM f_x%(spalten&+2),f_y%(spalten&+2)
f_x%(spalten&+1)=PRED(a_null&+breite&-(a_null&-x%))
f_y%(spalten&+1)=PRED(null&)
f_x%(spalten&+2)=SUCC(a_null&)
f_y%(spalten&+2)=PRED(null&)
p|=0
FOR z&=zeilen& DOWNTO 0
x_koord&=a_null&
PLOT x_koord&,FN y_koord(flÄche(0))
f_x%(0)=SUCC(x_koord&)
f_y%(0)=FN y_koord(flÄche(0))
FOR s&=1 TO spalten&
ADD x_koord&,abs_abs&
DRAW TO x_koord&,FN y_koord(flÄche(s&))
f_x%(s&)=x_koord&
f_y%(s&)=FN y_koord(flÄche(s&))
SUB flÄche(s&),array(z&,s&)
NEXT s&
DEC f_x%(spalten&)
@farbe(SUCC(zeilen&)-z&)
DEFFILL SUCC(z&),1
POLYFILL spalten&+3,f_x%(),f_y%()
SUB flÄche(0),array(z&,0)
PAUSE 5
NEXT z&
ERASE flÄche(),f_x%(),f_y%()
RETURN
> PROCEDURE schichto(VAR array())
spalten&=PRED(LPEEK(LPEEK(ARRPTR(daten()))))
zeilen&=PRED(LPEEK(LPEEK(ARRPTR(daten()))+4))
'
DIM s_bar(SUCC(spalten&))
FOR z&=0 TO zeilen&
FOR s&=0 TO spalten&
ADD s_bar(s&),array(z&,s&)
min=MIN(min,s_bar(s&))
max=MAX(max,s_bar(s&))
NEXT s&
NEXT z&
@rahmen2("Stack Bar",min,max)
'
DEFFN lÄnge(wert)=(wert/(max-min))*160
BOUNDARY 1
FOR s&=0 TO spalten&
'
o_null&=null&
p|=0
FOR z&=0 TO zeilen&
@farbe(z&)
DEFFILL z&,1
PBOX SUCC(a_null&+s&*abs_abs&),o_null&-FN lÄnge(array(z&,s&)),PRED(a_null&+abs_abs&+s&*abs_abs&),o_null&
SUB o_null&,FN lÄnge(array(z&,s&))
NEXT z&
'
NEXT s&
ERASE s_bar()
RETURN
'
> PROCEDURE rahmen1(min&,max&)
DRAW "pd sx0 sy0 ma",d_x&,d_y&
DRAW "tt 000 fd 100"
DRAW "tt",winkel|,"fd 250"
DRAW "tt",winkel|+knick|,"fd 250"
DRAW "tt 180 fd 100"
DRAW "tt",winkel|+knick|+180,"fd 250"
DRAW "tt 000 fd 100"
DRAW "tt 180 fd 100"
DRAW "tt",winkel|+180,"fd 250"
'
ordinate$=SPACE$(9)
FOR i|=0 TO 9
DRAW "tt 270 fd 10 bk 10"
RSET ordinate$=STR$(min&+(max&-min&)/10*i|,7,1)
TEXT 3,DRAW(1)+3,ordinate$
IF NOT ODD(i|)
DRAW "tt",winkel|,"fd 250 tt",winkel|+knick|,"fd 250 bk 250 tt",winkel|+180,"fd 250"
ENDIF
DRAW "tt 0 fd 10"
NEXT i|
DRAW "tt 270 fd 10 tt 90 fd 10"
RSET ordinate$=STR$(min&+(max&-min&)/10*i|,7,1)
TEXT 3,DRAW(1)+3,ordinate$
RETURN
> PROCEDURE rahmen2(titel$,min,max)
hÖhe&=180
breite&=500
x%=70
y&=35
'
BOX x%,y&-12,x%+breite&,y&
TEXT (x%+breite&/2)-LEN(titel$)*4,y&-3,titel$
BOX x%,y&,x%+breite&,y&+hÖhe&
ordinate$=SPACE$(9)
o_null&=y&+165
a_null&=x%+80
'
LINE a_null&,y&+5,a_null&,o_null&
FOR i|=10 DOWNTO 0
RSET ordinate$=STR$(min+(max-min)/10*(10-i|),5,1)
TEXT x%+3,y&+8+i|*16,ordinate$
LINE a_null&-5,y&+5+i|*16,a_null&,y&+5+i|*16
NEXT i|
'
null&=o_null&-((MAX(min,0)-min)/(max-min))*160
LINE a_null&,null&,a_null&+breite&-(a_null&-x%),null&
abs_abs&=(breite&-(a_null&-x%))/SUCC(spalten&)
FOR i%=a_null& TO a_null&+breite&-(a_null&-x%)-10 STEP abs_abs&
LINE i%,null&-1,i%,null&+1
NEXT i%
RETURN
> PROCEDURE min_max(base|,VAR daten())
deskriptor%=ARRPTR(daten())
adresse%=LPEEK(deskriptor%)
dim|=DPEEK(deskriptor%+4)
max=-10^38
min=ABS(max)
'
SELECT dim|
'
CASE 1 ! 1-dimensionales Array
'
bis&=LPEEK(adresse%)+PRED(base|)
FOR i&=base| TO bis&
max=MAX(max,daten(i&))
min=MIN(min,daten(i&))
NEXT i&
'
CASE 2 ! 2-dimensionales Array
'
spalten&=LPEEK(adresse%)+PRED(base|)
zeilen&=LPEEK(adresse%+4)+PRED(base|)
FOR i&=base| TO zeilen&
FOR j&=base| TO spalten&
max=MAX(max,daten(i&,j&))
min=MIN(min,daten(i&,j&))
NEXT j&
NEXT i&
'
ENDSELECT
RETURN
> PROCEDURE balken(sy,br&,ho,ti&)
b_x&=DRAW(0)
b_y&=DRAW(1)
'
f_x%(0)=DRAW(0)
f_y%(0)=DRAW(1)
DRAW "pu sy",sy,"tt 0 fd",ho
f_x%(1)=DRAW(0)
f_y%(1)=DRAW(1)
IF ho>0
DRAW "sy 0 tt",winkel|,"fd",ti&
f_x%(2)=DRAW(0)
f_y%(2)=DRAW(1)
DRAW "tt",winkel|+knick|,"fd",br&
f_x%(3)=DRAW(0)
f_y%(3)=DRAW(1)
DRAW "sy",sy,"tt 180 fd",ho
f_x%(4)=DRAW(0)
f_y%(4)=DRAW(1)
DRAW "sy 0 tt",winkel|+180,"fd",ti&
ELSE
DRAW "sy 0 tt",winkel|+knick|,"fd",br&
f_x%(2)=DRAW(0)
f_y%(2)=DRAW(1)
DRAW "tt",winkel|,"fd",ti&
f_x%(3)=DRAW(0)
f_y%(3)=DRAW(1)
DRAW "sy",sy,"tt 180 fd",ho
f_x%(4)=DRAW(0)
f_y%(4)=DRAW(1)
DRAW "sy 0 tt",winkel|+180+knick|,0,"fd",br&
ENDIF
f_x%(5)=DRAW(0)
f_y%(5)=DRAW(1)
POLYFILL 6,f_x%(),f_y%()
DRAW "sy0 ma",b_x&,b_y&
DRAW "pd co 0"
DRAW "sy",sy
DRAW "tt 0 fd",ho
DRAW "sy0 tt",winkel|+knick|,"fd",br&
DRAW "sy",sy,"tt 180 fd",ho
DRAW "sy0 tt",winkel|+180+knick|,"fd",br&
IF ho>0
DRAW "sy",sy,"tt 0 fd",ho
ENDIF
DRAW "sy0 tt",winkel|,"fd",ti&
DRAW "tt",winkel|+knick|,"fd",br&
DRAW "tt",winkel|+180,"fd",ti&
DRAW "sy",sy,"tt 180 fd",ABS(ho)
DRAW "sy0 tt",winkel|,"fd",ti&
DRAW "sy",sy,"tt 0 fd",ABS(ho)
'
DRAW "sy0 ma",b_x&,b_y&
RETURN
> PROCEDURE farbe(x|)
DEFFILL x|,1
INC p|
PBOX 620,p|*10+10,630,p|*10+20
RETURN
'
> PROCEDURE auswahl_box(menge_soll|,n|,VAR wahl$(),a!())
DIM a!(n|)
ARRAYFILL a!(),TRUE
ok!=FALSE
revers!=FALSE
markiert!=TRUE
ende!=FALSE
menge_ist|=0
DEFFILL 1
ma|=LEN(wahl$(1))
FOR i|=2 TO n|
ma|=MAX(ma|,LEN(wahl$(i|)))
NEXT i|
'
IF n|>10
l|=120
ELSE
l|=(n|*12)
ENDIF
b&=SUCC(INT(MAX((ma|*8)+30,156)/10))*10
x&=320-b&/2
y|=110-l|/2
GET x&,y|,x&+b&+1,y|+l|+37,hintergrund$
COLOR 0
PBOX x&,y|,x&+b&,y|+l|+36
COLOR 1
INC x&
INC y|
BOX x&,y|,x&+b&,y|+12
TEXT x&+b&/2-68,y|+9,"Bitte Wählen Sie!"
BOX x&,y|+12,x&+b&,y|+23
IF n|>10
FOR p&=x&+1 TO x&+b& STEP 10
LINE p&+1,y|+18,p&+5,y|+14
LINE p&+5,y|+14,p&+9,y|+18
LINE p&+2,y|+17,p&+2,y|+21
LINE p&+2,y|+21,p&+8,y|+21
LINE p&+8,y|+21,p&+8,y|+17
NEXT p&
ELSE
DEFFILL ,3
FILL x&+3,y|+15
ENDIF
BOX x&,y|+23,x&+b&,y|+23+l|
BOX x&,y|+23+l|,x&+b&,y|+34+l|
IF n|>10
FOR p&=x&+1 TO x&+b& STEP 10
LINE p&+1,y|+l|+5+23,p&+5,y|+l|+9+23
LINE p&+5,y|+l|+9+23,p&+9,y|+l|+5+23
LINE p&+2,y|+l|+1+23,p&+2,y|+l|+5+23
LINE p&+2,y|+l|+1+23,p&+8,y|+l|+1+23
LINE p&+8,y|+l|+1+23,p&+8,y|+l|+5+23
NEXT p&
ELSE
DEFFILL ,3
FILL x&+3,y|+25+l|
ENDIF
LINE x&+15,y|+23,x&+15,y|+23+l|
FOR i|=0 TO MIN(n|-1,9)
TEXT x&+3,y|+31+i|*12,i|
NEXT i|
DEC x&
DEC y|
BOX x&,y|,x&+b&,y|+l|+36
FOR l&=y|+23 TO y|+23+l| STEP 12
LINE x&,l&,x&+b&,l&
NEXT l&
FOR i|=1 TO MIN(n|,10)
TEXT x&+b&/2-(LEN(wahl$(i|))*8)/2,y|+20+i|*12,wahl$(i|)
NEXT i|
erster|=1
li&=x&+b&
l1|=y|+12
l2|=l1|+11
l3|=l2|+l|
l4|=l3|+11
REPEAT
taste$=INKEY$
IF taste$<>""
IF LEN(taste$)=1
taste&=ASC(taste$)
ELSE
taste&=ASC(RIGHT$(taste$))
ENDIF
SELECT taste&
CASE 65
IF erster|<n|-9
sel_rev(10)
sel_scr(1)
ENDIF
CASE 66
IF erster|>1
sel_rev(10)
sel_scr(0)
ENDIF
CASE 48 TO 57
SUB taste&,48
IF taste&<n|
IF a!(erster|+taste&)=TRUE
a!(erster|+taste&)=FALSE
INC menge_ist|
COLOR 1
LINE x&+b&-10,y|+30+taste&*12,x&+b&-7,y|+33+taste&*12
LINE x&+b&-7,y|+33+taste&*12,x&+b&-3,y|+25+taste&*12
ELSE
a!(erster|+taste&)=TRUE
DEC menge_ist|
COLOR 0
LINE x&+b&-10,y|+30+taste&*12,x&+b&-7,y|+33+taste&*12
LINE x&+b&-7,y|+33+taste&*12,x&+b&-3,y|+25+taste&*12
ENDIF
ENDIF
CASE 13
ende!=TRUE
ENDSELECT
taste$=""
ENDIF
IF MOUSEX>x& AND MOUSEX<li& AND MOUSEY>l2| AND MOUSEY<l3| AND MOUSEK<>2
' Mauszeiger im Auswahlfeld
eintrag|=MAX(0,(MOUSEY-y|-24)/12)
sel_rev(eintrag|)
IF MOUSEK=1 AND ok!=FALSE
IF a!(erster|+eintrag|)=TRUE
a!(erster|+eintrag|)=FALSE
INC menge_ist|
COLOR 1
LINE x&+b&-10,y|+30+eintrag|*12,x&+b&-7,y|+33+eintrag|*12
LINE x&+b&-7,y|+33+eintrag|*12,x&+b&-3,y|+25+eintrag|*12
ELSE
a!(erster|+eintrag|)=TRUE
DEC menge_ist|
COLOR 3
LINE x&+b&-10,y|+30+eintrag|*12,x&+b&-7,y|+33+eintrag|*12
LINE x&+b&-7,y|+33+eintrag|*12,x&+b&-3,y|+25+eintrag|*12
ENDIF
ENDIF
ok!=MOUSEK
ELSE
sel_rev(10)
ENDIF
IF MOUSEX>x& AND MOUSEX<li& AND MOUSEY>l1| AND MOUSEY<l2| AND MOUSEK=1 AND erster|<n|-9
' Mauszeiger im oberen Scrollfeld
sel_scr(1)
ELSE IF MOUSEX>x& AND MOUSEX<li& AND MOUSEY>l3| AND MOUSEY<l4| AND MOUSEK=1 AND erster|>1
' Mauszeiger im unteren Scrollfeld
sel_scr(0)
ENDIF
UNTIL MOUSEK=2 OR ende!=TRUE OR menge_soll|=menge_ist|
PUT x&,y|,hintergrund$
RETURN
> PROCEDURE sel_rev(nummer|)
IF revers!=TRUE AND revers|<>nummer| !Revers off
GET x&+19,y|+25+revers|*12,x&+b&-3,y|+33+revers|*12,revers$
PUT x&+19,y|+25+revers|*12,revers$,30
revers!=FALSE
ELSE IF revers!=FALSE AND nummer|<10 !Revers on
GET x&+19,y|+25+nummer|*12,x&+b&-3,y|+33+nummer|*12,revers$
PUT x&+19,y|+25+nummer|*12,revers$,30
revers!=TRUE
revers|=nummer|
ENDIF
RETURN
> PROCEDURE sel_scr(richtung|)
IF richtung|
INC erster|
ELSE
DEC erster|
ENDIF
GET x&+17,y|+25+richtung|*12,x&+b&-1,y|+10+l|+richtung|*12,teil$
PUT x&+17,y|+37-richtung|*12,teil$
DEFFILL 0
PBOX x&+18,y|+25+richtung|*108,x&+b&-1,y|+34+richtung|*108
DEFFILL 1
TEXT x&+5+b&/2-(LEN(wahl$(erster|+richtung|*9))*8)/2,y|+32+richtung|*108,wahl$(erster|+richtung|*9)
IF a!(erster|+richtung|*9)=FALSE
COLOR 1
LINE x&+b&-10,y|+30+richtung|*108,x&+b&-7,y|+33+richtung|*108
LINE x&+b&-7,y|+33+richtung|*108,x&+b&-3,y|+25+richtung|*108
ENDIF
RETURN